#ifndef __MENU_H__
#define __MENU_H__

#include "common.h"

typedef enum {
  Menu_Event_Up,
  Menu_Event_Down,
  Menu_Event_Left,
  Menu_Event_Right,
  Menu_Event_Center,
}MenuEvent_TypeDef;

typedef struct Menu_TypeDef{
  u8 * title;
  u8 childNum;
  u8 select;
  void (*pShow)(void);
  void (*pFunction)(MenuEvent_TypeDef);
  struct Menu_TypeDef * pFather;
  struct Menu_TypeDef ** pChild;
}Menu_TypeDef;

extern u8 modifyStep;

extern void Menu_Init(void);
extern void Menu_Show(void);
extern void Menu_Event(MenuEvent_TypeDef Menu_Event);
extern void Menu_UpdateTime(void);
extern void Menu_Update(void);



extern void GeneralShow(void);
extern void GeneralFunction(MenuEvent_TypeDef Menu_Event);
extern void MainMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void SteerProtectShow(void);
extern void SteerProtectFunction(MenuEvent_TypeDef Menu_Event);
extern void SsrRawMenuShow(void);
extern void SsrFiltMenuShow(void);
extern void SsrNormMenuShow(void);
extern void SsMaxMinMenuShow(void);
extern void EcdValMenuShow(void);
extern void DirErrMenuShow(void);
extern void DirPDMenuShow(void);
extern void DirPDMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void DirWeiXMenuShow(void);
extern void DirWeiXMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void SpdPIDMenuShow(void);
extern void SpdPIDMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void SpdConfMenuShow(void);
extern void SpdConfMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void TimeMenuShow(void);
extern void TimeMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void DirCtrlMenuShow(void);
extern void DirCtrlFunction(MenuEvent_TypeDef Menu_Event);
extern void CirWeiFunction(MenuEvent_TypeDef Menu_Event);
extern void CirWeiShow();
#ifdef YangMinDebug 
extern void SpdLoopCtrlMenuShow(void);
extern void SpdLoopCtrlFunction(MenuEvent_TypeDef Menu_Event);
#endif
#ifndef CAR_ID_1
extern void TwoCarDisMenuShow(void);
extern void TwoCarDisMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void TwoCarOvertakeMenuShow();
extern void OneOrTwoMenuShow();
extern void OneOrTwoMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void OvertakeENMenuShow();
extern void OvertakeENMenuFunction(MenuEvent_TypeDef Menu_Event);
extern void CircleConfMenuShow();
extern void CircleConfMenuFunction(MenuEvent_TypeDef Menu_Event);

#endif
extern void CheatMenuShow();
extern void CheatMenuFunction(MenuEvent_TypeDef Menu_Event);
#endif  //__MENU_H__
